package com.hy.Three390;

import java.util.Deque;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

/**
 * Created With IntelliJ IDEA.
 * Descriptions:每个字符最多出现两次的最长子字符串
 * 给你一个字符串 s ，请找出满足每个字符最多出现两次的最长子字符串，并返回该子字符串的 最大 长度。
 *
 * 示例 1：
 * 输入： s = "bcbbbcba"
 * 输出： 4
 * 解释：以下子字符串长度为 4，并且每个字符最多出现两次："bcbbbcba"。
 *
 * 示例 2：
 * 输入： s = "aaaa"
 * 输出： 2
 * 解释：以下子字符串长度为 2，并且每个字符最多出现两次："aaaa"。
 *
 * 提示：
 * 2 <= s.length <= 100
 * s 仅由小写英文字母组成。
 *
 * User:Mr.Du
 * Date:2024/3/24
 * Time:14:27
 */
public class MaximumLengthSubstring {
    public int maximumLengthSubstring(String s) {
        Deque<Character> queue = new LinkedList<>();
        Map<Character, Integer> mp = new HashMap<>();
        int max = 0;
        int left = 0, right = 0, n = s.length();
        while(right < n){
            char c = s.charAt(right);
            while(mp.get(c) != null && mp.get(c) == 2){
                max = Math.max(max, right - left);
                Character remove = queue.remove();
                mp.put(remove, mp.get(remove) - 1);
                left++;
            }
            queue.addLast(c);
            mp.put(c, mp.getOrDefault(c, 0) + 1);
            right++;
        }
        max = Math.max(max, right - left);
        return max;
    }

    public static void main(String[] args) {
        MaximumLengthSubstring maximumLengthSubstring = new MaximumLengthSubstring();
        System.out.println(maximumLengthSubstring.maximumLengthSubstring("aaaa"));
    }
}
